package tedu.rocketmq.consumer;

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import tedu.rocketmq.ex.BusinessException;
import tedu.rocketmq.service.HelloService;

@Component
//注解2个必要属性 指定订阅主题 指定消费者组 如果消息需要过滤 可以指定tag过滤表达式
@RocketMQMessageListener(
    topic="test-topic01",
    consumerGroup ="test-c-group04",
    selectorExpression = "*")
@Slf4j
public class MyConsumer01 implements RocketMQListener<String> {
    @Autowired
    private HelloService helloService;
    /**
     * @param name 消息内容，对应泛型的类型
     * MessageExt 监听器传递过来的消息就是底层消息对象
     * Object其他类型的消息 表示需要底层帮我完成反序列化，生产者发送的类型 就是这里接收的类型
     */
    @Override public void onMessage(String name) {
        try {
            //接收到消息数据 执行消费逻辑 调用业务完成业务逻辑
            log.info("接收到消息:{}", name);
            helloService.sayHi(name);
        }catch(BusinessException e){
            log.error("业务异常",e);
        }
    }


}
